package com.csun.cmny.provider.controller.message;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.provider.dto.OrderQueryDto;
import com.csun.cmny.provider.model.vo.query.CurTaskQueryVo;
import com.csun.cmny.provider.service.OmcCurTaskQueryGroupService;
import com.csun.cmny.provider.utils.AppUtil;
import com.csun.cmny.provider.vo.ExamineVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xiaoleilu.hutool.Hutool;
import com.xiaoleilu.hutool.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Auther: chisj chisj@foxmal.com
 * @Date: 2019-10-11 21:28
 * @Description:
 */
@Slf4j
public abstract class AbstractCurTaskQueryProcessor<E> implements CurTaskQuery {

    @Resource
    private OmcCurTaskQueryGroupService omcCurTaskQueryGroupService;

    @Override
    public ToDoVo queryToDoList(LoginAuthDto loginAuthDto) {

        ToDoVo toDoVo = new ToDoVo();

        // 1、获取指定查询器的配置
        String code = getClass().getSimpleName();

        // 2、如果配置器有配置，并且该机构生效
        CurTaskQueryVo curTaskQueryVo = omcCurTaskQueryGroupService
                .queryCurTaskQueryGroupByCodeAndGroupId(code, loginAuthDto.getGroupId());
        if (curTaskQueryVo == null) { // 未配置查询器)
            log.warn("尚未配置查询器【{}】", code);

            return toDoVo;
        }

        if (curTaskQueryVo.getCheck() == 0) { // 机构未配置查询器
            log.warn("机构名称【{}】机构Id【{}】尚未配置查询器【{}】",
                    loginAuthDto.getGroupName(), loginAuthDto.getGroupId(), code);

            return toDoVo;
        }

        // 3、根据查询器生成查询条件
        // CurTaskQueryDto T = createCurTaskQueryDto(loginAuthDto);

        // 4、根据查询条件查询待办事项
        List<E> data = queryCurTaskList(loginAuthDto);

        if (data != null) {
            toDoVo.setCode(code);
            toDoVo.setSize(data.size());
            toDoVo.setName(curTaskQueryVo.getName());
            toDoVo.setUrl(curTaskQueryVo.getUrl());
            toDoVo.setData(null);

        }

        return toDoVo;
    }

    // protected abstract T createCurTaskQueryDto(LoginAuthDto loginAuthDto);

    protected abstract List<E> queryCurTaskList(LoginAuthDto loginAuthDto);

    @Override
    public ToDoVo queryOrderList(OrderQueryDto orderQueryDto, LoginAuthDto loginAuthDto) {

        ToDoVo toDoVo = new ToDoVo();

        // 1、获取指定查询器的配置
        String code = getClass().getSimpleName();

        // 2、如果配置器有配置，并且该机构生效
        CurTaskQueryVo curTaskQueryVo = omcCurTaskQueryGroupService
                .queryCurTaskQueryGroupByCodeAndGroupId(code, loginAuthDto.getGroupId());
        if (curTaskQueryVo == null) { // 未配置查询器)
            log.warn("尚未配置查询器【{}】", code);

            return toDoVo;
        }

        if (curTaskQueryVo.getCheck() == 0) { // 机构未配置查询器
            log.warn("机构名称【{}】机构Id【{}】尚未配置查询器【{}】",
                    loginAuthDto.getGroupName(), loginAuthDto.getGroupId(), code);

            return toDoVo;
        }

        // 3、根据查询器生成查询条件
        // CurTaskQueryDto T = createCurTaskQueryDto(loginAuthDto);

        // 4、根据查询条件查询待办事项
        if (AppUtil.numIsNullOrZero(orderQueryDto.getPageNum()) ||
                AppUtil.numIsNullOrZero(orderQueryDto.getPageSize())) {
            PageHelper.startPage(1, 10);
        } else {
            PageHelper.startPage(orderQueryDto.getPageNum(), orderQueryDto.getPageSize());
        }
        List<E> data = queryCurOrderList(orderQueryDto, loginAuthDto);
        if (data != null) {
            PageInfo<E> info = new PageInfo<>(data);
            toDoVo.setCode(code);
            toDoVo.setSize(data.size());
            toDoVo.setName(curTaskQueryVo.getName());
            toDoVo.setUrl(curTaskQueryVo.getUrl());


            toDoVo.setData(info);

        }

        return toDoVo;
    }

    // protected abstract T createCurTaskQueryDto(LoginAuthDto loginAuthDto);

    protected abstract List<E> queryCurOrderList(OrderQueryDto orderQueryDto, LoginAuthDto loginAuthDto);
}
